home *** CD-ROM | disk | FTP | other *** search
- Programming in EPIC
-
- This short (very short) document describes EPIC's programming language (some
- would argue it's but a scripting language) and how to use it.
-
- The first thing to remember about scripts is that command characters are
- not required for commands! In fact, their use is discouraged, as it only
- makes more work for the client when parsing the command. There is, of
- course, an exception to this rule (but only one). Because the client allows
- commands to be overloaded by aliases, there needs to be a way to access the
- original command. This is done by giving the command character twice. For
- instance:
-
- alias mode {
- if ( (index(#&+ $0) == 0) || ([$0] == N) ) {
- //mode $*
- } {
- //mode $C $*
- }
- }
-
- The above alias overloads the builtin MODE command. It first checks whether
- the first argument passed was a channel name or your own nickname. If so,
- it executes the real MODE command using the arguments given. Otherwise, it
- executes the real MODE command for the current channel. Note that, because
- the command character can be changed, it is recommended that $K be used in
- lieu on a '/', as it will always represent the current command character:
-
- $K${K}mode $C $*
-
- Certain characters have special meaning in scripts and inside certain
- commands that they don't necessarily have on the input line. The semicolon
- (;), when used inside any {} command construct (from an alias, key binding,
- hook, timer action, etc.), acts as a command separator. For example:
-
- alias blah {
- on hook * echo hooked: $*;echo oops!
- }
-
- When the /blah alias is run, "oops!" will be displayed. However, we didn't
- want that. We wanted it to be displayed whenever the HOOK command was
- called. The solution is the quote, or escape, the semicolon with the
- backslash:
-
- alias blah {
- on hook * echo hooked: $*\;echo oops!
- }
-
- Naturally, the backslash (\) is another character with special meaning in
- scripts (but, again, not on the input line). It quote, or escapes, the
- character immediately in front of it. Escaping characters takes away any
- special meaning they might have (such as with semicolons, above). One neat
- side effect from this is that it permits line-continuation in expressions:
-
- if ( foo == 1 && \
- bar == 2 ) { ... }
-
- Speaking of quoting characters, the client's quoting rules can be confusing.
- In general, everything works as described above; quote special characters to
- use them in text context. However, the rules change when the client needs
- to parse a command more than once. USERHOST is a classic example of this.
- Let's say we've created this alias:
-
- alias foo userhost $0 -cmd echo ($*)
-
- That won't do at all, because both $expandos are parsed once, before the
- command is even executed, which isn't what we want. So we need to do some
- quoting on the -cmd part:
-
- alias foo userhost $0 -cmd echo \($$*\)
-
- Note that we quoted the '$' with the form '$$'. This is a special expando
- that expands to a single '$'. We could have escaped it with a backslash,
- but the $$ expando is faster. Anyway, that alias won't work either. Why?
- Because the parentheses cause the whole statement to be parsed twice, so
- we're right back where we started. We need to add another level of quoting
- to the parentheses:
-
- alias foo userhost $0 -cmd echo \\\($$*\\\)
-
- After the initial parse run, the parenthesis are still quoted, because '\\'
- expands to '\', and '\(' expands to '(', which together make '\('. After the
- command is executed, the ECHO command is then parsed, this time correctly.
-
- Other miscellaneous tips:
-
- 1) Use variable and alias structures.
- 2) Indent your code consistently. It will be easier to update later.
- 3) Comment your code. So you'll know what you did a year from now.
- 4) Use serial numbered hooks whenever possible.
- 5) For server output, use the "end" message instead of a WAIT command.
- 6) Read the client documentation! :)
-
- Refer to Section 5 of these helpfiles for information about specific
- commands. Refer to Section 6 for the client's builtin functions.
-
-